package model

type Request struct {
	Mid   int          `json:"mid"`
	Mtype int          `json:"mtype"`
	Status int		   `json:"status"`
	Time  int64        `json:"time,omitempty"`
	Sign  string       `json:"sign,omitempty"` // 样例里面有，文档里面没有这个字段
	Data  *RequestData `json:"data,omitempty"`
}

type Response struct {
	Mid    int          `json:"mid"`
	Mtype  int          `json:"mtype"`
	Time   int64        `json:"time,omitempty"`
	Sign   string       `json:"sign,omitempty"` // 样例里面有，文档里面没有这个字段
	Status int          `json:"status"`
	Info   string       `json:"info,omitempty"`
	Data   *interface{} `json:"data,omitempty"`
}

type RequestData struct {
	Sver    int    `json:"sver,omitempty"`
	UID     int    `json:"uid,omitempty"`
	Token   string `json:"token,omitempty"`
	Hver    string `json:"hver,omitempty"`
	Sn      string `json:"sn,omitempty"`
	Mac     string `json:"mac,omitempty"`
	TaskID  int64  `json:"taskId,omitempty"`
	TaskURL string `json:"taskUrl,omitempty"`
	Notice  string `json:"notice,omitempty"`
	UUID    string `json:"uuid,omitempty"`
	Seq     int `json:"seq,omitempty"`

	NoticeType int `json:"noticeType,omitempty"`

	HbInterval       int `json:"hbInterval,omitempty"`
	ScanReturnPage   int `json:"scanReturnPage,omitempty"`
	SearchReturnPage int `json:"searchReturnPage,omitempty"`
	HbDeviceNum      int `json:"hbdeviceNum,omitempty"`
	*LimitSpeed      `json:"limitSpeed,omitempty"`
	TasksVer         int    `json:"tasksVer,omitempty"`
	Tasks            []Task `json:"tasks,omitempty"`

	UpSpeed         float64  `json:"upspeed,omitempty"`
	DownSpeed       float64  `json:"downspeed,omitempty"`
	ExternalStorage float64  `json:"externalStorage,omitempty"`
	StorageSize     float64  `json:"storageSize,omitempty"`
	AvailableSize   float64  `json:"availableSize,omitempty"`
	Devices         []Device `json:"devices,omitempty"`

	Storages []Storage `json:"storages,omitempty"`
}

type ResponseData struct {
	Sver    int    `json:"sver,omitempty"`
	UID     int    `json:"uid,omitempty"`
	Token   string `json:"token,omitempty"`
	Hver    string `json:"hver,omitempty"`
	Sn      string `json:"sn,omitempty"`
	Mac     string `json:"mac,omitempty"`
	TaskID  int64  `json:"taskId,omitempty"`
	TaskURL string `json:"url,omitempty"`

	HbInterval       int `json:"hbInterval,omitempty"`
	ScanReturnPage   int `json:"scanReturnPage,omitempty"`
	SearchReturnPage int `json:"searchReturnPage,omitempty"`
	HbDeviceNum      int `json:"hbdeviceNum,omitempty"`
	*LimitSpeed      `json:"limitSpeed,omitempty"`
	TasksVer         int    `json:"tasksVer,omitempty"`
	Tasks            []Task `json:"tasks,omitempty"`
	Notice           string `json:"notice,omitempty"`

	UpSpeed         string           `json:"upspeed,omitempty"`
	DownSpeed       string           `json:"downspeed,omitempty"`
	ExternalStorage float64          `json:"externalStorage,omitempty"`
	StorageSize     float64          `json:"storageSize,omitempty"`
	AvailableSize   float64          `json:"availableSize,omitempty"`
	Devices         []ResponseDevice `json:"devices,omitempty"`
	Path            string           `json:"path,omitempty"`
	Keyword         string           `json:"keyword,omitempty"`

	DPartition *Partition `json:"dPartition,omitempty"`
}

type Partition struct {
	Sn   string `json:"sn,omitempty"`
	UUID string `json:"uuid,omitempty"`
	Seq  int    `json:"seq,omitempty"`
}

type LimitSpeed struct {
	UpSpeed   float64 `json:"upspeed"`
	DownSpeed float64 `json:"downspeed"`
}

type Device struct {
	Mac     string  `json:"mac"`
	Dspeed  float64 `json:"dspeed,omitempty"`
	Upspeed float64 `json:"upspeed,omitempty"`
	Status  int     `json:"status,omitempty"`
	Offline int     `json:"offline,omitempty"`
	Join    int     `json:"join,omitempty"`
	IP      string  `json:"ip,omitempty"`
	Type    int     `json:"type,omitempty"`
}

type ResponseDevice struct {
	Mac     string `json:"mac,omitempty"`
	Name    string `json:"name,omitempty"`
	Dspeed  string `json:"dspeed,omitempty"`
	Upspeed string `json:"upspeed,omitempty"`
	Status  int    `json:"status,omitempty"`
	Offline string `json:"offline,omitempty"`
	Join    string `json:"join,omitempty"`
	IP      string `json:"ip,omitempty"`
	Type    int    `json:"type,omitempty"`
}
